//package com.liujit.standard.basis.core.util;
//
//import cn.hutool.core.convert.Convert;
//
//import java.util.*;
//
//public class TreeUtil {
//    public static <T> List<Map> convert2Tree(List<T> list) {
//        return convert2Tree(list, null, "children");
//    }
//
//    public static <T> List<Map> convert2Tree(List<T> list, String childrenKey) {
//        return convert2Tree(list, null, childrenKey);
//    }
//
//    public static <T> List<Map> convert2Tree(List<T> list, Map<String, String> mapping) {
//        return convert2Tree(list, mapping, "children");
//    }
//
//    /**
//     * 对象数组格式化为tree结构，对象中必须具有{id,pid}属性
//     *
//     * @param list
//     * @param mapping     {"label":"name"} 将数据库查询list中的label属性替换为name属性
//     * @param childrenKey 自节点key名称 默认为children
//     * @param <T>
//     * @return
//     */
//    public static <T> List<Map> convert2Tree(List<T> list, Map<String, String> mapping, String childrenKey) {
//        if (list == null || list.size() <= 0) {
//            return new ArrayList<>();
//        }
//
//        Map root = new HashMap(16);
//        root.put(childrenKey, new ArrayList<Map>());
//
//        LinkedHashMap<String, Map> dataSet = new LinkedHashMap<>();
//        for (T obj : list) {
//            Map map;
//            if (obj instanceof Map) {
//                map = new HashMap(16) {{
//                    putAll((Map) obj);
//                }};
//            } else {
//                map = BeanUtil.obj2Map(obj);
//            }
//            //结果转换
//            if (mapping != null) {
//                for (String key : mapping.keySet()) {
//                    if (map.containsKey(key)) {
//                        map.put(mapping.get(key), map.get(key));
//                        //移除原有属性
//                        map.remove(key);
//                    }
//                }
//            }
//            dataSet.put(Convert.toStr(map.get("id")), map);
//        }
//
//        //组装树
//        for (String key : dataSet.keySet()) {
//            Map map = dataSet.get(key);
//            if (map.get(childrenKey) == null) {
//                List children = new ArrayList<>();
//                map.put(childrenKey, children);
//            }
//            String pid = Convert.toStr((map.get("pid")));
//            if (pid.equals("0")) {
//                ((List<Map>) root.get(childrenKey)).add((Map) map);
//            } else {
//                Map pNode = (Map) dataSet.get(pid);
//                if (pNode != null) {
//                    if (pNode.get(childrenKey) == null) {
//                        List children = new ArrayList<>();
//                        pNode.put(childrenKey, children);
//                    }
//                    ((List<Map>) pNode.get(childrenKey)).add((Map) map);
//                } else {
//                    ((List<Map>) root.get(childrenKey)).add((Map) map);
//                }
//            }
//        }
//
//        if (root.get(childrenKey) != null) {
//            return (List<Map>) root.get(childrenKey);
//        } else {
//            return new ArrayList<>();
//        }
//
//    }
//}
